package com.Book.test_1_25_springmvcbook.config;

import com.Book.test_1_25_springmvcbook.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ResponseBody
@Slf4j
@ControllerAdvice
public class ErrorHandler {
    // 用的时候直接按照下面这个方法写就行了, 会自动帮我们判断
    // 会根据我们的参数进行捕获
    @ExceptionHandler
    public Result exception(Exception e){
      log.error("发生异常,e:{}",e); // 没有这个日志的打印, 在控制台上会没有任何显示
      return Result.fail("内部错误"); // 这里不加 ResponseBody 的话 返回的就不是数据 ,而是一个页面了
        // 是页面就要被拦截到了
    }

    // 还可以按照类型进行捕获异常
    @ExceptionHandler
    public Result exception(NullPointerException e){ // 空指针异常
        log.error("发生异常,e:{}",e);
        return Result.fail("NullPointerException异常 请联系管理员");
    }

    @ExceptionHandler
    public Result exception(ArithmeticException e){ // 算数异常
        log.error("发生异常,e:{}",e);
        return Result.fail("ArithmeticException异常");
    }

    // 写的时候的注意事项
    // 固定的是 三个注解: @ResponseBody @ControllerAdvice @ExceptionHandler
    // 少任何一个都不可以
    // ResponseBody 取的的话 运行之后的 很多HTTP状态码 都不具备参考价值了

}
